(0) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
disj(T) → True
disj(F) → True
conj(Or(o1, o2)) → False
conj(T) → True
conj(F) → True
disj(And(a1, a2)) → conj(And(a1, a2))
disj(Or(t1, t2)) → and(conj(t1), disj(t1))
conj(And(t1, t2)) → and(disj(t1), conj(t1))
bool(T) → True
bool(F) → True
bool(And(a1, a2)) → False
bool(Or(o1, o2)) → False
isConsTerm(T, T) → True
isConsTerm(T, F) → False
isConsTerm(T, And(y1, y2)) → False
isConsTerm(T, Or(x1, x2)) → False
isConsTerm(F, T) → False
isConsTerm(F, F) → True
isConsTerm(F, And(y1, y2)) → False
isConsTerm(F, Or(x1, x2)) → False
isConsTerm(And(a1, a2), T) → False
isConsTerm(And(a1, a2), F) → False
isConsTerm(And(a1, a2), And(y1, y2)) → True
isConsTerm(And(a1, a2), Or(x1, x2)) → False
isConsTerm(Or(o1, o2), T) → False
isConsTerm(Or(o1, o2), F) → False
isConsTerm(Or(o1, o2), And(y1, y2)) → False
isConsTerm(Or(o1, o2), Or(x1, x2)) → True
isOp(T) → False
isOp(F) → False
isOp(And(t1, t2)) → True
isOp(Or(t1, t2)) → True
isAnd(T) → False
isAnd(F) → False
isAnd(And(t1, t2)) → True
isAnd(Or(t1, t2)) → False
getSecond(And(t1, t2)) → t1
getSecond(Or(t1, t2)) → t1
getFirst(And(t1, t2)) → t1
getFirst(Or(t1, t2)) → t1
disjconj(p) → disj(p)
The (relative) TRS S consists of the following rules:
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
Rewrite Strategy: INNERMOST
(1) DecreasingLoopProof (EQUIVALENT transformation)
The following loop(s) give(s) rise to the lower bound Ω(2n):
The rewrite sequence
disj(And(And(a1430_0, a2431_0), a2)) →+ and(and(disj(a1430_0), conj(a1430_0)), and(disj(a1430_0), conj(a1430_0)))
gives rise to a decreasing loop by considering the right hand sides subterm at position [0,0].
The pumping substitution is [a1430_0 / And(And(a1430_0, a2431_0), a2)].
The result substitution is [ ].
The rewrite sequence
disj(And(And(a1430_0, a2431_0), a2)) →+ and(and(disj(a1430_0), conj(a1430_0)), and(disj(a1430_0), conj(a1430_0)))
gives rise to a decreasing loop by considering the right hand sides subterm at position [1,0].
The pumping substitution is [a1430_0 / And(And(a1430_0, a2431_0), a2)].
The result substitution is [ ].
(2) BOUNDS(2^n, INF)
(3) RenamingProof (EQUIVALENT transformation)
Renamed function symbols to avoid clashes with predefined symbol.
(4) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
disj(T) → True
disj(F) → True
conj(Or(o1, o2)) → False
conj(T) → True
conj(F) → True
disj(And(a1, a2)) → conj(And(a1, a2))
disj(Or(t1, t2)) → and(conj(t1), disj(t1))
conj(And(t1, t2)) → and(disj(t1), conj(t1))
bool(T) → True
bool(F) → True
bool(And(a1, a2)) → False
bool(Or(o1, o2)) → False
isConsTerm(T, T) → True
isConsTerm(T, F) → False
isConsTerm(T, And(y1, y2)) → False
isConsTerm(T, Or(x1, x2)) → False
isConsTerm(F, T) → False
isConsTerm(F, F) → True
isConsTerm(F, And(y1, y2)) → False
isConsTerm(F, Or(x1, x2)) → False
isConsTerm(And(a1, a2), T) → False
isConsTerm(And(a1, a2), F) → False
isConsTerm(And(a1, a2), And(y1, y2)) → True
isConsTerm(And(a1, a2), Or(x1, x2)) → False
isConsTerm(Or(o1, o2), T) → False
isConsTerm(Or(o1, o2), F) → False
isConsTerm(Or(o1, o2), And(y1, y2)) → False
isConsTerm(Or(o1, o2), Or(x1, x2)) → True
isOp(T) → False
isOp(F) → False
isOp(And(t1, t2)) → True
isOp(Or(t1, t2)) → True
isAnd(T) → False
isAnd(F) → False
isAnd(And(t1, t2)) → True
isAnd(Or(t1, t2)) → False
getSecond(And(t1, t2)) → t1
getSecond(Or(t1, t2)) → t1
getFirst(And(t1, t2)) → t1
getFirst(Or(t1, t2)) → t1
disjconj(p) → disj(p)
The (relative) TRS S consists of the following rules:
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
Rewrite Strategy: INNERMOST
(5) TypeInferenceProof (BOTH BOUNDS(ID, ID) transformation)
Infered types.
(6) Obligation:
Innermost TRS:
Rules:
disj(T) → True
disj(F) → True
conj(Or(o1, o2)) → False
conj(T) → True
conj(F) → True
disj(And(a1, a2)) → conj(And(a1, a2))
disj(Or(t1, t2)) → and(conj(t1), disj(t1))
conj(And(t1, t2)) → and(disj(t1), conj(t1))
bool(T) → True
bool(F) → True
bool(And(a1, a2)) → False
bool(Or(o1, o2)) → False
isConsTerm(T, T) → True
isConsTerm(T, F) → False
isConsTerm(T, And(y1, y2)) → False
isConsTerm(T, Or(x1, x2)) → False
isConsTerm(F, T) → False
isConsTerm(F, F) → True
isConsTerm(F, And(y1, y2)) → False
isConsTerm(F, Or(x1, x2)) → False
isConsTerm(And(a1, a2), T) → False
isConsTerm(And(a1, a2), F) → False
isConsTerm(And(a1, a2), And(y1, y2)) → True
isConsTerm(And(a1, a2), Or(x1, x2)) → False
isConsTerm(Or(o1, o2), T) → False
isConsTerm(Or(o1, o2), F) → False
isConsTerm(Or(o1, o2), And(y1, y2)) → False
isConsTerm(Or(o1, o2), Or(x1, x2)) → True
isOp(T) → False
isOp(F) → False
isOp(And(t1, t2)) → True
isOp(Or(t1, t2)) → True
isAnd(T) → False
isAnd(F) → False
isAnd(And(t1, t2)) → True
isAnd(Or(t1, t2)) → False
getSecond(And(t1, t2)) → t1
getSecond(Or(t1, t2)) → t1
getFirst(And(t1, t2)) → t1
getFirst(Or(t1, t2)) → t1
disjconj(p) → disj(p)
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
Types:
disj :: T:F:Or:And → True:False
T :: T:F:Or:And
True :: True:False
F :: T:F:Or:And
conj :: T:F:Or:And → True:False
Or :: T:F:Or:And → a → T:F:Or:And
False :: True:False
And :: T:F:Or:And → b → T:F:Or:And
and :: True:False → True:False → True:False
bool :: T:F:Or:And → True:False
isConsTerm :: T:F:Or:And → T:F:Or:And → True:False
isOp :: T:F:Or:And → True:False
isAnd :: T:F:Or:And → True:False
getSecond :: T:F:Or:And → T:F:Or:And
getFirst :: T:F:Or:And → T:F:Or:And
disjconj :: T:F:Or:And → True:False
hole_True:False1_0 :: True:False
hole_T:F:Or:And2_0 :: T:F:Or:And
hole_a3_0 :: a
hole_b4_0 :: b
gen_T:F:Or:And5_0 :: Nat → T:F:Or:And
(7) OrderProof (LOWER BOUND(ID) transformation)
Heuristically decided to analyse the following defined symbols:
disj,
conjThey will be analysed ascendingly in the following order:
disj = conj
(8) Obligation:
Innermost TRS:
Rules:
disj(
T) →
Truedisj(
F) →
Trueconj(
Or(
o1,
o2)) →
Falseconj(
T) →
Trueconj(
F) →
Truedisj(
And(
a1,
a2)) →
conj(
And(
a1,
a2))
disj(
Or(
t1,
t2)) →
and(
conj(
t1),
disj(
t1))
conj(
And(
t1,
t2)) →
and(
disj(
t1),
conj(
t1))
bool(
T) →
Truebool(
F) →
Truebool(
And(
a1,
a2)) →
Falsebool(
Or(
o1,
o2)) →
FalseisConsTerm(
T,
T) →
TrueisConsTerm(
T,
F) →
FalseisConsTerm(
T,
And(
y1,
y2)) →
FalseisConsTerm(
T,
Or(
x1,
x2)) →
FalseisConsTerm(
F,
T) →
FalseisConsTerm(
F,
F) →
TrueisConsTerm(
F,
And(
y1,
y2)) →
FalseisConsTerm(
F,
Or(
x1,
x2)) →
FalseisConsTerm(
And(
a1,
a2),
T) →
FalseisConsTerm(
And(
a1,
a2),
F) →
FalseisConsTerm(
And(
a1,
a2),
And(
y1,
y2)) →
TrueisConsTerm(
And(
a1,
a2),
Or(
x1,
x2)) →
FalseisConsTerm(
Or(
o1,
o2),
T) →
FalseisConsTerm(
Or(
o1,
o2),
F) →
FalseisConsTerm(
Or(
o1,
o2),
And(
y1,
y2)) →
FalseisConsTerm(
Or(
o1,
o2),
Or(
x1,
x2)) →
TrueisOp(
T) →
FalseisOp(
F) →
FalseisOp(
And(
t1,
t2)) →
TrueisOp(
Or(
t1,
t2)) →
TrueisAnd(
T) →
FalseisAnd(
F) →
FalseisAnd(
And(
t1,
t2)) →
TrueisAnd(
Or(
t1,
t2)) →
FalsegetSecond(
And(
t1,
t2)) →
t1getSecond(
Or(
t1,
t2)) →
t1getFirst(
And(
t1,
t2)) →
t1getFirst(
Or(
t1,
t2)) →
t1disjconj(
p) →
disj(
p)
and(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
TrueTypes:
disj :: T:F:Or:And → True:False
T :: T:F:Or:And
True :: True:False
F :: T:F:Or:And
conj :: T:F:Or:And → True:False
Or :: T:F:Or:And → a → T:F:Or:And
False :: True:False
And :: T:F:Or:And → b → T:F:Or:And
and :: True:False → True:False → True:False
bool :: T:F:Or:And → True:False
isConsTerm :: T:F:Or:And → T:F:Or:And → True:False
isOp :: T:F:Or:And → True:False
isAnd :: T:F:Or:And → True:False
getSecond :: T:F:Or:And → T:F:Or:And
getFirst :: T:F:Or:And → T:F:Or:And
disjconj :: T:F:Or:And → True:False
hole_True:False1_0 :: True:False
hole_T:F:Or:And2_0 :: T:F:Or:And
hole_a3_0 :: a
hole_b4_0 :: b
gen_T:F:Or:And5_0 :: Nat → T:F:Or:And
Generator Equations:
gen_T:F:Or:And5_0(0) ⇔ T
gen_T:F:Or:And5_0(+(x, 1)) ⇔ Or(gen_T:F:Or:And5_0(x), hole_a3_0)
The following defined symbols remain to be analysed:
conj, disj
They will be analysed ascendingly in the following order:
disj = conj
(9) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol conj.
(10) Obligation:
Innermost TRS:
Rules:
disj(
T) →
Truedisj(
F) →
Trueconj(
Or(
o1,
o2)) →
Falseconj(
T) →
Trueconj(
F) →
Truedisj(
And(
a1,
a2)) →
conj(
And(
a1,
a2))
disj(
Or(
t1,
t2)) →
and(
conj(
t1),
disj(
t1))
conj(
And(
t1,
t2)) →
and(
disj(
t1),
conj(
t1))
bool(
T) →
Truebool(
F) →
Truebool(
And(
a1,
a2)) →
Falsebool(
Or(
o1,
o2)) →
FalseisConsTerm(
T,
T) →
TrueisConsTerm(
T,
F) →
FalseisConsTerm(
T,
And(
y1,
y2)) →
FalseisConsTerm(
T,
Or(
x1,
x2)) →
FalseisConsTerm(
F,
T) →
FalseisConsTerm(
F,
F) →
TrueisConsTerm(
F,
And(
y1,
y2)) →
FalseisConsTerm(
F,
Or(
x1,
x2)) →
FalseisConsTerm(
And(
a1,
a2),
T) →
FalseisConsTerm(
And(
a1,
a2),
F) →
FalseisConsTerm(
And(
a1,
a2),
And(
y1,
y2)) →
TrueisConsTerm(
And(
a1,
a2),
Or(
x1,
x2)) →
FalseisConsTerm(
Or(
o1,
o2),
T) →
FalseisConsTerm(
Or(
o1,
o2),
F) →
FalseisConsTerm(
Or(
o1,
o2),
And(
y1,
y2)) →
FalseisConsTerm(
Or(
o1,
o2),
Or(
x1,
x2)) →
TrueisOp(
T) →
FalseisOp(
F) →
FalseisOp(
And(
t1,
t2)) →
TrueisOp(
Or(
t1,
t2)) →
TrueisAnd(
T) →
FalseisAnd(
F) →
FalseisAnd(
And(
t1,
t2)) →
TrueisAnd(
Or(
t1,
t2)) →
FalsegetSecond(
And(
t1,
t2)) →
t1getSecond(
Or(
t1,
t2)) →
t1getFirst(
And(
t1,
t2)) →
t1getFirst(
Or(
t1,
t2)) →
t1disjconj(
p) →
disj(
p)
and(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
TrueTypes:
disj :: T:F:Or:And → True:False
T :: T:F:Or:And
True :: True:False
F :: T:F:Or:And
conj :: T:F:Or:And → True:False
Or :: T:F:Or:And → a → T:F:Or:And
False :: True:False
And :: T:F:Or:And → b → T:F:Or:And
and :: True:False → True:False → True:False
bool :: T:F:Or:And → True:False
isConsTerm :: T:F:Or:And → T:F:Or:And → True:False
isOp :: T:F:Or:And → True:False
isAnd :: T:F:Or:And → True:False
getSecond :: T:F:Or:And → T:F:Or:And
getFirst :: T:F:Or:And → T:F:Or:And
disjconj :: T:F:Or:And → True:False
hole_True:False1_0 :: True:False
hole_T:F:Or:And2_0 :: T:F:Or:And
hole_a3_0 :: a
hole_b4_0 :: b
gen_T:F:Or:And5_0 :: Nat → T:F:Or:And
Generator Equations:
gen_T:F:Or:And5_0(0) ⇔ T
gen_T:F:Or:And5_0(+(x, 1)) ⇔ Or(gen_T:F:Or:And5_0(x), hole_a3_0)
The following defined symbols remain to be analysed:
disj
They will be analysed ascendingly in the following order:
disj = conj
(11) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol disj.
(12) Obligation:
Innermost TRS:
Rules:
disj(
T) →
Truedisj(
F) →
Trueconj(
Or(
o1,
o2)) →
Falseconj(
T) →
Trueconj(
F) →
Truedisj(
And(
a1,
a2)) →
conj(
And(
a1,
a2))
disj(
Or(
t1,
t2)) →
and(
conj(
t1),
disj(
t1))
conj(
And(
t1,
t2)) →
and(
disj(
t1),
conj(
t1))
bool(
T) →
Truebool(
F) →
Truebool(
And(
a1,
a2)) →
Falsebool(
Or(
o1,
o2)) →
FalseisConsTerm(
T,
T) →
TrueisConsTerm(
T,
F) →
FalseisConsTerm(
T,
And(
y1,
y2)) →
FalseisConsTerm(
T,
Or(
x1,
x2)) →
FalseisConsTerm(
F,
T) →
FalseisConsTerm(
F,
F) →
TrueisConsTerm(
F,
And(
y1,
y2)) →
FalseisConsTerm(
F,
Or(
x1,
x2)) →
FalseisConsTerm(
And(
a1,
a2),
T) →
FalseisConsTerm(
And(
a1,
a2),
F) →
FalseisConsTerm(
And(
a1,
a2),
And(
y1,
y2)) →
TrueisConsTerm(
And(
a1,
a2),
Or(
x1,
x2)) →
FalseisConsTerm(
Or(
o1,
o2),
T) →
FalseisConsTerm(
Or(
o1,
o2),
F) →
FalseisConsTerm(
Or(
o1,
o2),
And(
y1,
y2)) →
FalseisConsTerm(
Or(
o1,
o2),
Or(
x1,
x2)) →
TrueisOp(
T) →
FalseisOp(
F) →
FalseisOp(
And(
t1,
t2)) →
TrueisOp(
Or(
t1,
t2)) →
TrueisAnd(
T) →
FalseisAnd(
F) →
FalseisAnd(
And(
t1,
t2)) →
TrueisAnd(
Or(
t1,
t2)) →
FalsegetSecond(
And(
t1,
t2)) →
t1getSecond(
Or(
t1,
t2)) →
t1getFirst(
And(
t1,
t2)) →
t1getFirst(
Or(
t1,
t2)) →
t1disjconj(
p) →
disj(
p)
and(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
TrueTypes:
disj :: T:F:Or:And → True:False
T :: T:F:Or:And
True :: True:False
F :: T:F:Or:And
conj :: T:F:Or:And → True:False
Or :: T:F:Or:And → a → T:F:Or:And
False :: True:False
And :: T:F:Or:And → b → T:F:Or:And
and :: True:False → True:False → True:False
bool :: T:F:Or:And → True:False
isConsTerm :: T:F:Or:And → T:F:Or:And → True:False
isOp :: T:F:Or:And → True:False
isAnd :: T:F:Or:And → True:False
getSecond :: T:F:Or:And → T:F:Or:And
getFirst :: T:F:Or:And → T:F:Or:And
disjconj :: T:F:Or:And → True:False
hole_True:False1_0 :: True:False
hole_T:F:Or:And2_0 :: T:F:Or:And
hole_a3_0 :: a
hole_b4_0 :: b
gen_T:F:Or:And5_0 :: Nat → T:F:Or:And
Generator Equations:
gen_T:F:Or:And5_0(0) ⇔ T
gen_T:F:Or:And5_0(+(x, 1)) ⇔ Or(gen_T:F:Or:And5_0(x), hole_a3_0)
No more defined symbols left to analyse.